單例在專案中只會存在一個,也可以想成整個專案的全域變數
所以用起來很無腦,什麼狀態和暫存都往單例丟
然後查 Bug 時就會痛恨當初的自己
單例有四種,分別是
懶人包:直接學「靜態內部」就好,其他的不用學
我們精英中心.jpg
如果你真的很想知道的話,完整說明在這邊:
「靜態內部單例」第一次載入類別並不會初始化,只有在第一次調用 getInstance()
的時候才會載入類別,不僅能保證執行緒安全,也能保證單例的唯一性,也延遲了單例的實例化,比較推薦;此外單例對象如果持有 Context,那麼很容易引發記憶體洩露。此時需要注意傳遞給單例對象的 Context 最好是 Application Context。
假設我們要建立一個存放會員資料的單例
public class Member {
public static Member getInstance() {
return MemberHolder.MEMBER;
}
private static class MemberHolder {
private static final Member MEMBER = new Member();
}
}
public class Member {
private String name;
public static Member getInstance() {
return MemberHolder.MEMBER;
}
private static class MemberHolder {
private static final Member MEMBER = new Member();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Member.getInstance().setName("AndyAWD");
Log.d("TAG", "姓名: " + Member.getInstance().getName());